package org.example.tdd;

/**
 * 报数游戏 - FizzBuzz. 规则如下:
 * - 遇到3的倍数(包括3), 报“Fizz”替代数字
 * - 遇到5的倍数(包括5), 报“Buzz”替代数字
 * - 遇到既是3的倍数, 又是5的倍数, 喊“FizzBuzz”替代数字
 *
 * @author Haibin Yuan
 */
public class FizzBuzz {

    /**
     * 按游戏规则, 把数字转换成字符串.
     *
     * @param i 原始报数
     * @return 转换结果
     */
    public String convert(int i) {
        if (i % 15 == 0) {
            return "FizzBuzz";
        }
        if (i % 3 == 0) {
            return "Fizz";
        }
        if (i % 5 == 0) {
            return "Buzz";
        }
        return String.valueOf(i);
    }

    /**
     * 输出报数结果.
     *
     * @param n 参与FizzBuzz游戏的人数 (1~n报数)
     * @return 报数结果
     */
    public String output(int n) {
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= n; i++) {
            sb.append(convert(i));
            if (i != n) {
                sb.append(",");
            }
        }
        return sb.toString();
    }
}
